
/**
 * Date:2022年9月6日下午4:13:08
 * Copyright (c) 2022, www.bwbroad.com All Rights Reserved.
 *
*/

package com.util;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * Description: TODO <br/>
 * Date:     2022年9月6日 下午4:13:08 <br/>
 * @author   wangbing	 
 */
public class JdkProxyFactory  implements InvocationHandler{

    //获取代理对象


        private Object originalObject;


        //获取代理对象

        public Object newProxyInstance(Object originalObject){

            this. originalObject = originalObject;



            /**

             * 绑定关系，也就是和具体的哪个实现类关联

             * 参数1：原始类的类加载器

             * 参数2：原始类的接口

             * 参数3：jdk代理类本身

             */

            return  Proxy.newProxyInstance(originalObject.getClass().getClassLoader(),

                    originalObject.getClass().getInterfaces(),this);

        }
        
        public Object invoke(Object proxy, Method method, Object[] args) {

            Object result = null;

            try{

                //方法增强

                System.out.println("通过JDK动态代理调用 "+method.getName() +", 打印日志 begin");

                result = method.invoke(originalObject,args);

                //方法增强

                System.out.println("通过JDK动态代理调用 "+method.getName() +", 打印日志 end");

            }catch (Exception e){

                e.printStackTrace();

            }

            return result;

        }


}

